package cn.agiledata.bank.linkbank.impl.cib;

import java.util.Map;

import com.crypt.Des.DesUtil;

/**
 * 中国兴业银行通用方法类
 * 
 * @author 马贤波
 * 
 */
class CibUtils {
    private CibUtils() {
    }

    /**
     * 按照兴业银行生成mac值的规则拼凑加密内容
     * 
     * @param values
     *            所有参数
     * @param keys
     *            参与校验的顺序相关的关键字组
     * @return 拼凑好的加密内容
     */
    private static String getScrabbleContent(Map values, String[] keys) {
        String content = "";
        for (int i = 0; i < keys.length; i++) {
            content += (String) values.get(keys[i]);
        }
        return content;
    }

    /**
     * 按照兴业银行生成mac值的规则生成mac值
     * 
     * @param values
     *            所有参数
     * @param keys
     *            参与校验的顺序相关的关键字组
     * @param macKey
     *            密钥
     * @return 生成的mac值
     */
    public static String generateMac(Map values, String[] keys, String macKey) {
        String scrabbleContent = getScrabbleContent(values, keys);
        return DesUtil.genMac(macKey, scrabbleContent);
    }

    /**
     * 按照兴业银行生成mac值的规则校验mac值
     * 
     * @param values
     *            所有参数
     * @param keys
     *            参与校验的顺序相关的关键字组
     * @param macKey
     *            密钥
     * @param mac
     *            待校验的mac值
     * @return true if 校验通过, otherwise false
     */
    public static boolean validateMac(Map values, String[] keys, String macKey,
            String mac) {
        return DesUtil.checkMac(macKey, getScrabbleContent(values, keys), mac);
    }
}
